import * as THREE from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// 导入动画库
import gsap from 'gsap'

// 掌握 GSAP 设置各种动画效果

// 创建场景
const scene = new THREE.Scene()

// 创建相机
const camera = new THREE.PerspectiveCamera(75,
  window.innerWidth / window.innerHeight, 0.1, 1000)

// 设置相机位置
camera.position.set(0, 0, 10)
scene.add(camera)

// 添加物体
// 创建几何体
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 })
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)

// 修改物体位置
cube.position.set(0, 0, 0)
// 缩放
// cube.scale.set(3,2,1)
// cube.scale.x = 5
// 旋转
// cube.rotation.set(Math.PI/4, 0, 0 , 'XZY')
// 将几何体添加到场景中
scene.add(cube)

// 初始化 渲染器
const renderer = new THREE.WebGLRenderer()

// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)
console.log(renderer)
// 设置webgl渲染的 canvas 内容添加到 body
document.body.appendChild(renderer.domElement)

// // 使用渲染器，通过相机将场景渲染进来
// renderer.render(scene, camera)

// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement)

// 添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper(5)
scene.add(axesHelper)

// 设置时钟
const clock = new THREE.Clock()

// 设置动画
let animate1 = gsap.to(cube.position, {
  x: 5, duration: 5, ease: 'power1.inOut',
  // 设置重复的次数， 无限次循环 -1
  repeat: -1,
  // 往返运动
  yoyo: true,
  // delay， 延迟2s 运动
  delay: 2,
  onComplete: () => {
    console.log('动画完成了')
  },
  onStart: () => {
    console.log('动画开始了')
  }
})
gsap.to(cube.rotation, { x: 2 * Math.PI, duration: 5, ease: 'power1.inOut' })

window.addEventListener("dblclick", () => {
  if(animate1.isActive()) {
    // 暂停
    animate1.pause()
  } else {
    // 恢复
    animate1.resume()
  }

})
function render () {
  renderer.render(scene, camera)
  // 渲染下一帧的时候会调用render 函数
  requestAnimationFrame(render)
}

render()
